home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / unixSyscall / RCS / mmap.c,v < prev    next >
Text File  |  1991-08-12  |  7KB  |  352 lines

  1. head     1.4;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.4
  10. date     91.08.12.17.10.47;  author shirriff;  state Exp;
  11. branches ;
  12. next     1.3;
  13.  
  14. 1.3
  15. date     91.08.12.17.07.13;  author shirriff;  state Exp;
  16. branches ;
  17. next     1.2;
  18.  
  19. 1.2
  20. date     90.12.13.17.08.46;  author shirriff;  state Exp;
  21. branches ;
  22. next     1.1;
  23.  
  24. 1.1
  25. date     90.01.11.14.34.37;  author shirriff;  state Exp;
  26. branches ;
  27. next     ;
  28.  
  29.  
  30. desc
  31. @@
  32.  
  33.  
  34. 1.4
  35. log
  36. @Fixed type bug.
  37. @
  38. text
  39. @/* 
  40.  * mmap.c --
  41.  *
  42.  *    Procedure to map from Unix mmap system call to Sprite.
  43.  *
  44.  * Copyright 1989 Regents of the University of California
  45.  * All rights reserved.
  46.  */
  47.  
  48. #ifndef lint
  49. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/mmap.c,v 1.3 91/08/12 17:07:13 shirriff Exp $ SPRITE (Berkeley)";
  50. #endif not lint
  51.  
  52. #include "sprite.h"
  53.  
  54. #include <sys/types.h>
  55.  
  56. #include "compatInt.h"
  57.  
  58.  
  59. /*
  60.  *----------------------------------------------------------------------
  61.  *
  62.  * mmap --
  63.  *
  64.  *    Procedure to map from Unix mmap system call to Sprite
  65.  *    Vm_Mmap.
  66.  *
  67.  * Results:
  68.  *    Returns address of the mapped segment.
  69.  *    Returns -1 if an error occurs.
  70.  *
  71.  * Side effects:
  72.  *    Creates a mapped segment.
  73.  *
  74.  *----------------------------------------------------------------------
  75.  */
  76.  
  77. Address
  78. mmap(addr, len, prot, share, fd, pos)
  79.     caddr_t    addr;    /* Starting virtual address of mapped segment. */
  80.     int        len;    /* Length of segment to map. */
  81.     int     prot;    /* Protections for segment. */
  82.     int        share;    /* Private/shared flag. */
  83.     int        fd;    /* Descriptor of open file to map. */
  84.     off_t    pos;    /* Offset into mapped file. */
  85. {
  86.     Address newAddr;        /* Address returned by Vm_Mmap. */
  87.     ReturnStatus status;    /* result returned by Vm_Mmap. */
  88.  
  89.     status = Vm_Mmap((Address)addr, len, prot, share, fd, pos, &newAddr);
  90.     if (status != SUCCESS) {
  91.     errno = Compat_MapCode(status);
  92.     return((Address) -1);
  93.     } else {
  94.     return (newAddr);
  95.     }
  96. }
  97.  
  98.  
  99. /*
  100.  *----------------------------------------------------------------------
  101.  *
  102.  * munmap --
  103.  *
  104.  *    Procedure to map from Unix munmap system call to Sprite
  105.  *    Vm_Munmap.
  106.  *
  107.  * Results:
  108.  *    Returns 0 on success.
  109.  *    Returns -1 if an error occurs.
  110.  *
  111.  * Side effects:
  112.  *    Removes the mapping of the page.
  113.  *
  114.  *----------------------------------------------------------------------
  115.  */
  116.  
  117. int
  118. munmap(addr, len)
  119.     caddr_t    addr;    /* Starting virtual address of mapped segment. */
  120.     int        len;    /* Length of segment to unmap. */
  121. {
  122.     ReturnStatus status;    /* result returned by Vm_Mmap. */
  123.  
  124.     status = Vm_Munmap((Address)addr, len, 0);
  125.     if (status != SUCCESS) {
  126.     errno = Compat_MapCode(status);
  127.     return(-1);
  128.     } else {
  129.     return (0);
  130.     }
  131. }
  132.  
  133. /*
  134.  *----------------------------------------------------------------------
  135.  *
  136.  * msync --
  137.  *
  138.  *    Procedure to map from Unix msync system call to Sprite
  139.  *    Vm_Msync.
  140.  *
  141.  * Results:
  142.  *    Returns 0 if success.
  143.  *    Returns -1 if an error occurs.
  144.  *
  145.  * Side effects:
  146.  *    Syncs pages to disk.
  147.  *
  148.  *----------------------------------------------------------------------
  149.  */
  150.  
  151. int
  152. msync(addr, len)
  153.     caddr_t    addr;    /* Starting virtual address of region. */
  154.     int        len;    /* Length of segment to sync. */
  155. {
  156.     ReturnStatus status;    /* result returned by Vm_Msync. */
  157.  
  158.     status = Vm_Msync((Address)addr, len);
  159.     if (status != SUCCESS) {
  160.     errno = Compat_MapCode(status);
  161.     return(-1);
  162.     } else {
  163.     return (0);
  164.     }
  165. }
  166.  
  167.  
  168. /*
  169.  *----------------------------------------------------------------------
  170.  *
  171.  * mlock --
  172.  *
  173.  *    Procedure to map from Unix mmap system call to Sprite
  174.  *    Vm_Mlock.
  175.  *
  176.  * Results:
  177.  *    Returns 0 if success.
  178.  *    Returns -1 if an error occurs.
  179.  *
  180.  * Side effects:
  181.  *    locks pages.
  182.  *
  183.  *----------------------------------------------------------------------
  184.  */
  185.  
  186. int
  187. mlock(addr, len)
  188.     caddr_t    addr;    /* Starting virtual address of region. */
  189.     int        len;    /* Length of region to lock. */
  190. {
  191.     ReturnStatus status;    /* result returned by Vm_Mlock. */
  192.  
  193.     status = Vm_Mlock((Address)addr, len);
  194.     if (status != SUCCESS) {
  195.     errno = Compat_MapCode(status);
  196.     return(-1);
  197.     } else {
  198.     return (0);
  199.     }
  200. }
  201.  
  202.  
  203. /*
  204.  *----------------------------------------------------------------------
  205.  *
  206.  * munlock --
  207.  *
  208.  *    Procedure to map from Unix mmap system call to Sprite
  209.  *    Vm_Munlock.
  210.  *
  211.  * Results:
  212.  *    Returns 0 if success.
  213.  *    Returns -1 if an error occurs.
  214.  *
  215.  * Side effects:
  216.  *    Unlocks pages.
  217.  *
  218.  *----------------------------------------------------------------------
  219.  */
  220.  
  221. int
  222. munlock(addr, len)
  223.     caddr_t    addr;    /* Starting virtual address of region. */
  224.     int        len;    /* Length of region to unlock. */
  225. {
  226.     ReturnStatus status;    /* result returned by Vm_Munlock. */
  227.  
  228.     status = Vm_Munlock((Address)addr, len);
  229.     if (status != SUCCESS) {
  230.     errno = Compat_MapCode(status);
  231.     return(-1);
  232.     } else {
  233.     return (0);
  234.     }
  235. }
  236.  
  237.  
  238. /*
  239.  *----------------------------------------------------------------------
  240.  *
  241.  * mincore --
  242.  *
  243.  *    Procedure to map from Unix mincore system call to Sprite
  244.  *    Vm_Mincore.
  245.  *
  246.  * Results:
  247.  *    Returns vector of values; one for each page.
  248.  *        0 if page not virtually present.
  249.  *        1 if page paged out.
  250.  *        2 if page clean, unreferenced.
  251.  *        3 if page clean, referenced.
  252.  *        4 if page dirty.
  253.  *
  254.  * Side effects:
  255.  *    None.
  256.  *
  257.  *----------------------------------------------------------------------
  258.  */
  259.  
  260. int
  261. mincore(addr, len, vec)
  262.     caddr_t    addr;    /* Starting virtual address. */
  263.     int        len;    /* Length of segment to map. */
  264.     char     *vec;    /* Return value vector. */
  265. {
  266.     ReturnStatus status;    /* result returned by Vm_Mincore. */
  267.  
  268.     status = Vm_Mincore((Address)addr, len, vec);
  269.     if (status != SUCCESS) {
  270.     errno = Compat_MapCode(status);
  271.     return(-1);
  272.     } else {
  273.     return (0);
  274.     }
  275. }
  276.  
  277. /*
  278.  *----------------------------------------------------------------------
  279.  *
  280.  * mprotect --
  281.  *
  282.  *    Procedure to map from Unix mprotect system call to Sprite
  283.  *    Vm_Mprotect.
  284.  *
  285.  * Results:
  286.  *    Returns 0 if success.
  287.  *    Returns -1 if an error occurs.
  288.  *
  289.  * Side effects:
  290.  *    Changes protection.
  291.  *
  292.  *----------------------------------------------------------------------
  293.  */
  294.  
  295. Address
  296. mprotect(addr, len, prot)
  297.     caddr_t    addr;    /* Starting virtual address. */
  298.     int        len;    /* Length of region. */
  299.     int     prot;    /* Protections for segment. */
  300. {
  301.     ReturnStatus status;    /* result returned by Vm_Mprotect. */
  302.  
  303.     status = Vm_Mprotect((Address)addr, len, prot);
  304.     if (status != SUCCESS) {
  305.     errno = Compat_MapCode(status);
  306.     return(-1);
  307.     } else {
  308.     return (0);
  309.     }
  310. }
  311. @
  312.  
  313.  
  314. 1.3
  315. log
  316. @Added status return to mmap
  317. @
  318. text
  319. @d11 1
  320. a11 1
  321. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/mmap.c,v 1.2 90/12/13 17:08:46 shirriff Exp $ SPRITE (Berkeley)";
  322. d222 1
  323. a222 1
  324. void
  325. @
  326.  
  327.  
  328. 1.2
  329. log
  330. @Added mprotect function.
  331. @
  332. text
  333. @d11 1
  334. a11 1
  335. static char rcsid[] = "$Header: /sprite/src/lib/c/unixSyscall/RCS/mmap.c,v 1.1 90/01/11 14:34:37 shirriff Exp Locker: shirriff $ SPRITE (Berkeley)";
  336. d230 7
  337. a236 1
  338.     (void) Vm_Mincore((Address)addr, len, vec);
  339. @
  340.  
  341.  
  342. 1.1
  343. log
  344. @Initial revision
  345. @
  346. text
  347. @d11 1
  348. a11 1
  349. static char rcsid[] = "$Header: /sprite/users/shirriff/test/RCS/mmap.c,v 1.1 89/07/26 23:43:31 shirriff Exp Locker: shirriff $ SPRITE (Berkeley)";
  350. d231 35
  351. @
  352.